package org.example.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.example.pojo.DUser;
import org.example.pojo.select.DUserSelect;
import org.example.service.DUserService;
import org.example.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/user")
@Tag(name = "用户数据API",description = "User Controller")
public class DUserController {

    @Autowired
    private DUserService dUserService;

    /**
     * 用户登录
     * @param dUser 用户对象
     * @return token值
     */
    @Operation(summary = "用户登录")
    @PostMapping("/login")
    public Result<Map> Login(@RequestBody DUser dUser){
        return dUserService.Login(dUser);
    }

    /**
     * 获取用户登录信息
     * @param token 登录保存的token
     * @return user信息
     */
    @Operation(summary = "获取登录用户信息")
    @GetMapping("/getUserInfo")
    public Result<DUser> GetUserInfo(@RequestHeader(defaultValue = "0") String token){
        return dUserService.GetUserInfo(token);
    }

    /**
     * 获取全部用户信息
     * @param dUserSelect 搜条件
     * @return 查询出的Map
     */
    @Operation(summary = "获取全部用户信息")
    @PostMapping("/selectAll")
    public Result<Map> selectAll(@RequestBody DUserSelect dUserSelect){
        return dUserService.selectAll(dUserSelect);
    }

    /**
     * 修改用户状态
     * @param dUser 需修改用户
     * @return 无
     */
    @Operation(summary = "修改用户状态")
    @PostMapping("/updateStatus")
    public Result<DUser> UpdateStatus(@RequestBody DUser dUser){
        return dUserService.UpdateStatus(dUser);
    }

    /**
     * 删除用户
     * @param dUser 需删除用户
     * @return 无
     */
    @Operation(summary = "删除用户")
    @PostMapping("/delete")
    public Result<DUser> Delete(@RequestBody DUser dUser){
        return dUserService.Delete(dUser);
    }

    /**
     * 修改用户密码
     * @param dUser 需更改密码用户
     * @return 无
     */
    @Operation(summary = "修改用户密码")
    @PostMapping("/updatePassword")
    public Result<DUser> UpdatePassword(@RequestBody DUser dUser){
        return dUserService.UpdatePassword(dUser);
    }

    /**
     * 搜索单个用户
     * @param dUser 搜索的用户
     * @return user
     */
    @Operation(summary = "搜索单个用户信息")
    @PostMapping("/selectOne")
    public Result<DUser> SelectOne(@RequestBody DUser dUser){
        return dUserService.SelectOne(dUser);
    }

    /**
     * 修改用户信息
     * @param dUserSelect 用户信息
     * @return 修改是否成功
     */
    @Operation(summary = "修改用户信息")
    @PostMapping("/updateUserInfo")
    public Result<DUser> UpdateUserInfo(@RequestBody DUserSelect dUserSelect){
        return dUserService.UpdateUserInfo(dUserSelect);
    }

    /**
     * 添加新用户
     * @param dUser 用户信息
     * @return 无
     */
    @Operation(summary = "添加新用户")
    @PostMapping("/addUser")
    public Result<DUser> AddUser(@RequestBody DUser dUser){
        return dUserService.AddUser(dUser);
    }
}
